/**
 * 消息管理API
 * 用于前端调用沙画消息相关功能
 */

// 导入云对象
const sandartObj = uniCloud.importObject('sandart')

/**
 * 消息API模块
 */
export default {
	/**
	 * 获取用户消息列表
	 * @param {object} params 查询参数
	 * @param {string} [params.type] 消息类型
	 * @param {number} [params.page=1] 页码
	 * @param {number} [params.limit=20] 每页数量
	 * @returns {Promise<object>} 消息列表
	 * @example
	 * const result = await messageApi.getList({
	 *   type: 'system',
	 *   page: 1,
	 *   limit: 20
	 * })
	 * console.log(result.list) // 消息列表
	 */
	async getList(params = {}) {
		try {
			const result = await sandartObj.getMessageList(params)
			return result
		} catch (error) {
			console.error('获取消息列表失败:', error)
			throw error
		}
	},

	/**
	 * 标记消息为已读
	 * @param {string} messageId 消息ID
	 * @returns {Promise<object>} 标记结果
	 * @example
	 * const result = await messageApi.markAsRead('messageId123')
	 */
	async markAsRead(messageId) {
		try {
			const result = await sandartObj.markMessageAsRead({ messageId })
			return result
		} catch (error) {
			console.error('标记消息已读失败:', error)
			throw error
		}
	},

	/**
	 * 批量标记消息为已读
	 * @param {Array} messageIds 消息ID列表
	 * @returns {Promise<object>} 批量标记结果
	 * @example
	 * const result = await messageApi.batchMarkAsRead(['id1', 'id2', 'id3'])
	 */
	async batchMarkAsRead(messageIds) {
		try {
			const result = await sandartObj.batchMarkMessagesAsRead({ messageIds })
			return result
		} catch (error) {
			console.error('批量标记消息已读失败:', error)
			throw error
		}
	},

	/**
	 * 删除消息
	 * @param {string} messageId 消息ID
	 * @returns {Promise<object>} 删除结果
	 * @example
	 * const result = await messageApi.delete('messageId123')
	 */
	async delete(messageId) {
		try {
			const result = await sandartObj.deleteMessage({ messageId })
			return result
		} catch (error) {
			console.error('删除消息失败:', error)
			throw error
		}
	},

	/**
	 * 批量删除消息
	 * @param {Array} messageIds 消息ID列表
	 * @returns {Promise<object>} 批量删除结果
	 * @example
	 * const result = await messageApi.batchDelete(['id1', 'id2', 'id3'])
	 */
	async batchDelete(messageIds) {
		try {
			const result = await sandartObj.batchDeleteMessages({ messageIds })
			return result
		} catch (error) {
			console.error('批量删除消息失败:', error)
			throw error
		}
	},

	/**
	 * 发送系统消息
	 * @param {object} params 发送参数
	 * @param {string} params.userId 接收用户ID
	 * @param {string} params.type 消息类型
	 * @param {object} params.title 消息标题（多语言）
	 * @param {object} params.content 消息内容（多语言）
	 * @param {object} [params.data] 附加数据
	 * @param {number} [params.priority=1] 优先级
	 * @returns {Promise<object>} 发送结果
	 * @example
	 * const result = await messageApi.sendSystem({
	 *   userId: 'user123',
	 *   type: 'notification',
	 *   title: {
	 *     'zh-Hans': '系统通知',
	 *     'en': 'System Notification'
	 *   },
	 *   content: {
	 *     'zh-Hans': '您有新的消息',
	 *     'en': 'You have a new message'
	 *   },
	 *   priority: 2
	 * })
	 */
	async sendSystem(params) {
		try {
			const result = await sandartObj.sendSystemMessage(params)
			return result
		} catch (error) {
			console.error('发送系统消息失败:', error)
			throw error
		}
	},

	/**
	 * 批量发送系统消息
	 * @param {object} params 批量发送参数
	 * @param {Array} params.userIds 接收用户ID列表
	 * @param {string} params.type 消息类型
	 * @param {object} params.title 消息标题（多语言）
	 * @param {object} params.content 消息内容（多语言）
	 * @param {object} [params.data] 附加数据
	 * @param {number} [params.priority=1] 优先级
	 * @returns {Promise<object>} 批量发送结果
	 * @example
	 * const result = await messageApi.batchSendSystem({
	 *   userIds: ['user1', 'user2', 'user3'],
	 *   type: 'announcement',
	 *   title: {
	 *     'zh-Hans': '系统公告',
	 *     'en': 'System Announcement'
	 *   },
	 *   content: {
	 *     'zh-Hans': '系统将于今晚维护',
	 *     'en': 'System maintenance tonight'
	 *   }
	 * })
	 */
	async batchSendSystem(params) {
		try {
			const result = await sandartObj.batchSendSystemMessage(params)
			return result
		} catch (error) {
			console.error('批量发送系统消息失败:', error)
			throw error
		}
	},

	/**
	 * 获取未读消息数量
	 * @returns {Promise<object>} 未读数量
	 * @example
	 * const result = await messageApi.getUnreadCount()
	 * console.log(result.unreadCount) // 未读数量
	 */
	async getUnreadCount() {
		try {
			const result = await sandartObj.getUnreadMessageCount()
			return result
		} catch (error) {
			console.error('获取未读消息数量失败:', error)
			throw error
		}
	},

	/**
	 * 全部标记为已读
	 * @returns {Promise<object>} 标记结果
	 * @example
	 * const result = await messageApi.markAllAsRead()
	 */
	async markAllAsRead() {
		try {
			const result = await sandartObj.markAllMessagesAsRead()
			return result
		} catch (error) {
			console.error('全部标记已读失败:', error)
			throw error
		}
	},

	/**
	 * 获取消息详情
	 * @param {string} messageId 消息ID
	 * @returns {Promise<object>} 消息详情
	 * @example
	 * const result = await messageApi.getDetail('messageId123')
	 * console.log(result.message) // 消息详情
	 */
	async getDetail(messageId) {
		try {
			const result = await sandartObj.getMessageDetail({ messageId })
			return result
		} catch (error) {
			console.error('获取消息详情失败:', error)
			throw error
		}
	},

	/**
	 * 获取消息统计信息
	 * @param {object} params 查询参数
	 * @param {string} [params.type] 消息类型
	 * @returns {Promise<object>} 统计信息
	 * @example
	 * const result = await messageApi.getStats({ type: 'system' })
	 * console.log(result) // { total: 100, unread: 5, read: 95 }
	 */
	async getStats(params = {}) {
		try {
			const result = await sandartObj.getMessageStats(params)
			return result
		} catch (error) {
			console.error('获取消息统计失败:', error)
			throw error
		}
	},

	/**
	 * 消息快捷操作
	 */
	shortcuts: {
		/**
		 * 获取系统消息列表
		 * @param {object} params 查询参数
		 * @returns {Promise<object>} 系统消息列表
		 */
		async getSystemMessages(params = {}) {
			return await this.getList({ ...params, type: 'system' })
		},

		/**
		 * 获取通知消息列表
		 * @param {object} params 查询参数
		 * @returns {Promise<object>} 通知消息列表
		 */
		async getNotifications(params = {}) {
			return await this.getList({ ...params, type: 'notification' })
		},

		/**
		 * 获取私信列表
		 * @param {object} params 查询参数
		 * @returns {Promise<object>} 私信列表
		 */
		async getPrivateMessages(params = {}) {
			return await this.getList({ ...params, type: 'private' })
		},

		/**
		 * 清空已读消息
		 * @returns {Promise<object>} 清空结果
		 */
		async clearReadMessages() {
			try {
				// 先获取已读消息ID列表
				const result = await this.getList({ limit: 1000 })
				const readMessageIds = result.list
					.filter(msg => msg.is_read)
					.map(msg => msg.message_id)
				
				if (readMessageIds.length > 0) {
					return await this.batchDelete(readMessageIds)
				}
				
				return { success: true, message: '没有已读消息需要清空', deleted: 0 }
			} catch (error) {
				console.error('清空已读消息失败:', error)
				throw error
			}
		}
	}
}
